Dining Philosophers
 
The ‘Dining Philosophers’ problem is a CLASSIC thought experiment, of the problems that occur when processes running simultaneously must share resources.
In my version, N philosophers and N Sporks are placed evenly around a circular table.
(Some versions have N philosophers and N single chopsticks.  Same principle.)
 
Initially a philosopher’s strategy might be:
Grab Spork on the left.
Grab Spork on the right.
Eat until full.
Lick Spork in right hand clean, then put it back down.
Lick Spork in left hand clean, then put it back down.

The problem is:
If all philosophers start eating at the same time, there is a danger that:
Each will get the Spork/chopstick to the left, 
But none will get the Spork/chopstick to the right.

A natural human response, when you have part but not all of what you need:
Hold onto what you have, and wait until you get the rest.
Unfortunately, this might leave the philosophers starving to death, each clutching a Spork/chopstick in their left hand.

Initially the headwaiter’s strategy might be:
If no one is eating, assassinate at random a philosopher who is not eating, placing any Spork they have back on their left or right.
 
1)      Come up with a better strategy for the hungry philosophers, if possible.
2)      Come up with a better strategy for the headwaiter, if possible.
3)      Can your strategies guarantee there will be no problem?
4)      Can your strategies be used for operating systems and processes?